home *** CD-ROM | disk | FTP | other *** search
/ Aminet 3 / Aminet 3 - July 1994.iso / Aminet / dev / src / rot3dsrc.lha / rot3d / clear.a next >
Encoding:
Text File  |  1994-04-11  |  6.5 KB  |  293 lines

  1. ;/****************************************************************
  2. ;This code is copyright 1993. All Rights Reserved. Authors:-
  3. ;
  4. ;  Chris Hames
  5. ;
  6. ;****************************************************************/
  7.  
  8. ;    INCLUDE "defines.i"
  9.  
  10.     section    data
  11.  
  12.     XDEF    _mdtmps
  13.  
  14. sbpr:
  15.     dc.l    0
  16.  
  17.  
  18.     section    code
  19.  
  20.     XDEF    _cpuclear
  21.     XDEF    _cpuclear2
  22.  
  23. ; Could make this much faster if actual sizes are known
  24.  
  25. _cpuclear:                        ; has to be multiple of 4 in size
  26.     move.l    4(sp),a0            /* Pointer to mem
  27.     move.l    8(sp),d0            /* size
  28.     lsr.l    #2,d0
  29.     subq.l    #1,d0
  30.     moveq    #0,d1
  31. loophere:
  32.     move.l    d1,(a0)+
  33.     dbra    d0,loophere
  34.     rts
  35.  
  36. _cpuclear2:                        ; has to be multiple of 4 in size
  37.     move.l    4(sp),a0            /* Pointer to mem
  38.     move.l    8(sp),d0            /* size
  39.     lsr.l    #2,d0
  40.     subq.l    #1,d0
  41.     moveq    #1,d1
  42. loophere2:
  43.     move.l    d1,(a0)+
  44.     dbra    d0,loophere2
  45.     rts
  46.  
  47.     XREF    _fastbm
  48.     XREF    _lines
  49.  
  50.  
  51.     XDEF    _fasttochip
  52.  
  53. _fasttochip:
  54.     movem.l    d2-d7/a2-a6,-(sp)
  55.     move.l    44+4(sp),a0        ;/* pointer to dst BitMap */
  56.     lea    _fastbm,a1            ;/* pointer to src bitmap */
  57.     move.l  #sbpr,a2
  58.     move.w  (a1),(a2)
  59.     move.l    8(a1),a2        ;/* pointer to src mem    */
  60.     move.l    8(a0),a3        ;/* pointer to dst plane0 */
  61.     move.l    12(a0),a4        ;/* pointer to dst plane1 */
  62.     move.l    16(a0),a5        ;/* pointer to dst plane2 */
  63.     move.l    20(a0),a6        ;/* pointer to dst plane3 */
  64.     move.l    24(a0),a1        ;/* pointer to dst plane4 */
  65.  
  66.     move.w    (a0),d4            ;/* get bytes per row */
  67.     move.w    2(a0),d5        ;/* get Rows */
  68.  
  69.     subq.w    #1,d5            ;(Rows/2)-1
  70. floop:
  71.     lea    _lines,a0
  72.     move.w  sbpr,d6
  73.     lsr.w   #2,d6
  74.     subq.w  #1,d6
  75. ;    moveq    #(SBYTESPERROW/4)-1,d6
  76. lloop:
  77.     movem.l    (a2)+,d0-d3        ;Get 32 pixels (4 bitplanes)
  78.     move.b    d0,d4
  79.     lsl.w    #8,d4
  80.     move.b    d1,d4
  81.     swap    d4
  82.     move.b    d2,d4
  83.     lsl.w    #8,d4
  84.     move.b    d3,d4
  85.     lsr.w    #8,d0
  86.     lsr.w    #8,d1
  87.     lsr.w    #8,d2
  88.     lsr.w    #8,d3
  89.     move.l    d4,(a6)+        ;Do top copy
  90.  
  91.     move.b    d0,d4
  92.     lsl.w    #8,d4
  93.     move.b    d1,d4
  94.     swap    d4
  95.     move.b    d2,d4
  96.     lsl.w    #8,d4
  97.     move.b    d3,d4
  98.     swap    d0
  99.     swap    d1
  100.     swap    d2
  101.     swap    d3
  102.     move.l    d4,(a5)+        ;Do top copy
  103.  
  104.     move.b    d0,d4
  105.     lsl.w    #8,d4
  106.     move.b    d1,d4
  107.     swap    d4
  108.     move.b    d2,d4
  109.     lsl.w    #8,d4
  110.     move.b    d3,d4
  111.     lsr.w    #8,d0
  112.     lsr.w    #8,d1
  113.     lsr.w    #8,d2
  114.     lsr.w    #8,d3
  115.     move.l    d4,(a4)+        ;Do Top copy
  116.  
  117.     move.b    d0,d4
  118.     lsl.w    #8,d4
  119.     move.b    d1,d4
  120.     swap    d4
  121.     move.b    d2,d4
  122.     lsl.w    #8,d4
  123.     move.b    d3,d4
  124.     move.l    d4,(a3)+        ;Do top copy
  125.  
  126.     move.l    (a0)+,d4        ;Do the special 5th bitplane
  127.     move.l    d4,(a1)+
  128.  
  129.     dbra    d6,lloop
  130.  
  131.     dbra    d5,floop
  132.  
  133.     movem.l    (sp)+,d2-d7/a2-a6
  134.     rts
  135.  
  136.  
  137.     XDEF    _fasttochip2
  138.  
  139. _fasttochip2:
  140.     movem.l    d2-d7/a2-a6,-(sp)
  141.     move.l    44+4(sp),a0        ;/* pointer to dst BitMap */
  142.     lea    _fastbm,a1        ;/* pointer to src bitmap */
  143.     move.l    8(a1),a2        ;/* pointer to src mem    */
  144.     move.l    8(a0),a3        ;/* pointer to dst plane0 */
  145.     move.l    12(a0),a4        ;/* pointer to dst plane1 */
  146.     move.l    16(a0),a5        ;/* pointer to dst plane2 */
  147.     move.l    20(a0),a6        ;/* pointer to dst plane3 */
  148.     move.l    24(a0),a1        ;/* pointer to dst plane4 */
  149.  
  150.     move.w    (a0),d4            ;/* get bytes per row */
  151.     move.w    2(a0),d5        ;/* get Rows */
  152.  
  153.     lsr.w    #1,d5
  154.     subq.w    #1,d5            ;((Rows/2)/2)-1
  155. floop2:
  156.     lea    _lines,a0
  157.     move.w  sbpr,d6
  158.     lsr.w   #2,d6
  159.     subq.w  #1,d6
  160. ;    moveq    #(SBYTESPERROW/4)-1,d6
  161. lloop2:
  162.     move.w  sbpr,d2
  163.     movem.l    (a2)+,d0-d1            ;Get 16 pixels (4 bitplanes)
  164.     move.l    a2,-(sp)
  165.     lea    Table,a2
  166.     moveq    #0,d4
  167.     move.b    d0,d4
  168.     add.w    d4,d4                ; This is not needed if 68020+
  169.     move.w    0(a2,d4.w),d4
  170.     swap    d4
  171.     move.b    d1,d4
  172.     add.w    d4,d4                ; This is not needed if 68020+
  173.     move.w    0(a2,d4.w),d4
  174.     move.l    d4,0(a6,d2.w)        ;Do top copy
  175.     move.l    d4,(a6)+            ;Do top copy
  176.     lsr.w    #8,d0
  177.     lsr.w    #8,d1
  178.  
  179.     moveq    #0,d4
  180.     move.b    d0,d4
  181.     add.w    d4,d4                ; This is not needed if 68020+
  182.     move.w    0(a2,d4.w),d4
  183.     swap    d4
  184.     move.b    d1,d4
  185.     add.w    d4,d4                ; This is not needed if 68020+
  186.     move.w    0(a2,d4.w),d4
  187.     move.l    d4,0(a5,d2.w)        ;Do top copy
  188.     move.l    d4,(a5)+            ;Do top copy
  189.     swap    d0
  190.     swap    d1
  191.  
  192.     moveq    #0,d4
  193.     move.b    d0,d4
  194.     add.w    d4,d4                ; This is not needed if 68020+
  195.     move.w    0(a2,d4.w),d4
  196.     swap    d4
  197.     move.b    d1,d4
  198.     add.w    d4,d4                ; This is not needed if 68020+
  199.     move.w    0(a2,d4.w),d4
  200.     move.l    d4,0(a4,d2.w)        ;Do top copy
  201.     move.l    d4,(a4)+            ;Do top copy
  202.     lsr.w    #8,d0
  203.     lsr.w    #8,d1
  204.  
  205.     moveq    #0,d4
  206.     move.b    d0,d4
  207.     add.w    d4,d4                ; This is not needed if 68020+
  208.     move.w    0(a2,d4.w),d4
  209.     swap    d4
  210.     move.b    d1,d4
  211.     add.w    d4,d4                ; This is not needed if 68020+
  212.     move.w    0(a2,d4.w),d4
  213.     move.l    d4,0(a3,d2.w)        ;Do top copy
  214.     move.l    d4,(a3)+            ;Do top copy
  215.  
  216.     moveq    #0,d4
  217.     move.w    (a0)+,d1        ;Do the special 5th bitplane
  218.     move.w    d1,d4
  219.     lsr.w    #8,d4
  220.     add.w    d4,d4                ; This is not needed if 68020+
  221.     move.w    0(a2,d4.w),d4
  222.     swap    d4
  223.     move.b    d1,d4
  224.     add.w    d4,d4                ; This is not needed if 68020+
  225.     move.w    0(a2,d4.w),d4
  226.     move.l    d4,0(a1,d2.w)        ;Do top copy
  227.     move.l    d4,(a1)+            ;Do top copy
  228.  
  229.     move.l    (sp)+,a2
  230.     dbra    d6,lloop2
  231.  
  232.     move.w  sbpr,d6
  233.     adda.w    d6,a6
  234.     adda.w    d6,a5
  235.     adda.w    d6,a4
  236.     adda.w    d6,a3
  237.  
  238.     adda.w    d6,a1
  239.  
  240.     dbra    d5,floop2
  241.  
  242.     movem.l    (sp)+,d2-d7/a2-a6
  243.     rts
  244.  
  245.         XDEF    _ReadEClock
  246.  
  247. _ReadEClock:
  248.         move.l  4(sp),a0
  249.         move.l  a6,-(sp)
  250.         move.l  _TimerBase#,a6
  251.         jsr     -$3c(a6)
  252.         move.l  (sp)+,a6
  253.         rts
  254.  
  255.  
  256.     section    data
  257.  
  258. Table:
  259.  dc.w $0000,$0003,$000c,$000f,$0030,$0033,$003c,$003f
  260.  dc.w $00c0,$00c3,$00cc,$00cf,$00f0,$00f3,$00fc,$00ff
  261.  dc.w $0300,$0303,$030c,$030f,$0330,$0333,$033c,$033f
  262.  dc.w $03c0,$03c3,$03cc,$03cf,$03f0,$03f3,$03fc,$03ff
  263.  dc.w $0c00,$0c03,$0c0c,$0c0f,$0c30,$0c33,$0c3c,$0c3f
  264.  dc.w $0cc0,$0cc3,$0ccc,$0ccf,$0cf0,$0cf3,$0cfc,$0cff
  265.  dc.w $0f00,$0f03,$0f0c,$0f0f,$0f30,$0f33,$0f3c,$0f3f
  266.  dc.w $0fc0,$0fc3,$0fcc,$0fcf,$0ff0,$0ff3,$0ffc,$0fff
  267.  dc.w $3000,$3003,$300c,$300f,$3030,$3033,$303c,$303f
  268.  dc.w $30c0,$30c3,$30cc,$30cf,$30f0,$30f3,$30fc,$30ff
  269.  dc.w $3300,$3303,$330c,$330f,$3330,$3333,$333c,$333f
  270.  dc.w $33c0,$33c3,$33cc,$33cf,$33f0,$33f3,$33fc,$33ff
  271.  dc.w $3c00,$3c03,$3c0c,$3c0f,$3c30,$3c33,$3c3c,$3c3f
  272.  dc.w $3cc0,$3cc3,$3ccc,$3ccf,$3cf0,$3cf3,$3cfc,$3cff
  273.  dc.w $3f00,$3f03,$3f0c,$3f0f,$3f30,$3f33,$3f3c,$3f3f
  274.  dc.w $3fc0,$3fc3,$3fcc,$3fcf,$3ff0,$3ff3,$3ffc,$3fff
  275.  dc.w $c000,$c003,$c00c,$c00f,$c030,$c033,$c03c,$c03f
  276.  dc.w $c0c0,$c0c3,$c0cc,$c0cf,$c0f0,$c0f3,$c0fc,$c0ff
  277.  dc.w $c300,$c303,$c30c,$c30f,$c330,$c333,$c33c,$c33f
  278.  dc.w $c3c0,$c3c3,$c3cc,$c3cf,$c3f0,$c3f3,$c3fc,$c3ff
  279.  dc.w $cc00,$cc03,$cc0c,$cc0f,$cc30,$cc33,$cc3c,$cc3f
  280.  dc.w $ccc0,$ccc3,$cccc,$cccf,$ccf0,$ccf3,$ccfc,$ccff
  281.  dc.w $cf00,$cf03,$cf0c,$cf0f,$cf30,$cf33,$cf3c,$cf3f
  282.  dc.w $cfc0,$cfc3,$cfcc,$cfcf,$cff0,$cff3,$cffc,$cfff
  283.  dc.w $f000,$f003,$f00c,$f00f,$f030,$f033,$f03c,$f03f
  284.  dc.w $f0c0,$f0c3,$f0cc,$f0cf,$f0f0,$f0f3,$f0fc,$f0ff
  285.  dc.w $f300,$f303,$f30c,$f30f,$f330,$f333,$f33c,$f33f
  286.  dc.w $f3c0,$f3c3,$f3cc,$f3cf,$f3f0,$f3f3,$f3fc,$f3ff
  287.  dc.w $fc00,$fc03,$fc0c,$fc0f,$fc30,$fc33,$fc3c,$fc3f
  288.  dc.w $fcc0,$fcc3,$fccc,$fccf,$fcf0,$fcf3,$fcfc,$fcff
  289.  dc.w $ff00,$ff03,$ff0c,$ff0f,$ff30,$ff33,$ff3c,$ff3f
  290.  dc.w $ffc0,$ffc3,$ffcc,$ffcf,$fff0,$fff3,$fffc,$ffff
  291.  
  292.  
  293.